<%@ page import="wiki.zimo.constant.Constant" %>
<%@ page import="wiki.zimo.dao.*" %>
<%@ page import="wiki.zimo.domain.Category" %>
<%@ page import="wiki.zimo.domain.Order" %>
<%@ page import="wiki.zimo.domain.Orderitem" %>
<%@ page import="wiki.zimo.domain.User" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>支付结果</title>
</head>
<body>
<%
    /* *
     * 功能：支付宝服务器同步通知页面
     * 日期：2017-03-30
     * 说明：
     * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
     * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。


     *************************页面功能说明*************************
     * 该页面仅做页面展示，业务逻辑处理请勿在该页面执行
     */

    // 获取支付宝GET过来反馈信息
    Map<String, String> params = new HashMap<String, String>();
    Map<String, String[]> requestParams = request.getParameterMap();
    for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
        String name = (String) iter.next();
        String[] values = (String[]) requestParams.get(name);
        String valueStr = "";
        for (int i = 0; i < values.length; i++) {
            valueStr = (i == values.length - 1) ? valueStr + values[i]
                    : valueStr + values[i] + ",";
        }
        // 乱码解决，这段代码在出现乱码时使用
//			valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
        params.put(name, valueStr);

    }

    boolean signVerified = true;//AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //调用SDK验证签名

    //——请在这里编写您的程序（以下代码仅作参考）——
    if (signVerified) {
        // 商户订单号
        String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");

        OrderDao orderDao = new OrderDao();
        CategoryDao categoryDao = new CategoryDao();
        OrderItemDao orderItemDao = new OrderItemDao();
        ProductDao productDao = new ProductDao();
        UserDao userDao = new UserDao();

        List<Category> categories = categoryDao.findAll();

        Order order = orderDao.findOneById(out_trade_no);
        order.setState(Constant.ORDER_PAY_YET);
        orderDao.update(order);

        List<Orderitem> orderitems = orderItemDao.findOrderitemsByOid(order.getOid());
        for (Orderitem item : orderitems) {
            item.setProduct(productDao.findOneById(item.getPid()));
        }

        order.setOrderItems(orderitems);
        User user = userDao.findOneById(order.getUid());

        // 由于session跨域失效，所以。。。重新设置
        session.setAttribute(Constant.CATEGORYS, categories);
        session.setAttribute(Constant.ORDER, order);
        session.setAttribute(Constant.USER_LOG_ON, user);

        // 转发到
        response.sendRedirect(request.getContextPath() + "/pages/reception/order/payOrder.jsp");
    } else {
        out.println("验签失败" + params);
    }
%>
</body>
</html>
